package cn.iocoder.yudao.module.worker.service.clerkapply;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.worker.controller.admin.category.vo.CategoryRespVO;
import cn.iocoder.yudao.module.worker.controller.admin.clerkapply.vo.*;
import cn.iocoder.yudao.module.worker.controller.app.clerkapply.vo.AppClerkApplyPageReqVO;
import cn.iocoder.yudao.module.worker.controller.app.clerkapply.vo.AppClerkApplySaveReqVO;
import cn.iocoder.yudao.module.worker.dal.dataobject.clerkapply.ClerkApplyDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.worker.dal.dataobject.clerklevel.ClerkLevelDO;

/**
 * 店员申请 Service 接口
 *
 * @author Jerry
 */
public interface ClerkApplyService {

    /**
     * 创建店员申请
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClerkApply(@Valid ClerkApplySaveReqVO createReqVO);

    /**
     * 更新店员申请
     *
     * @param updateReqVO 更新信息
     */
    void updateClerkApply(@Valid ClerkApplySaveReqVO updateReqVO);

    /**
     * 删除店员申请
     *
     * @param id 编号
     */
    void deleteClerkApply(Long id);

    /**
     * 获得店员申请
     *
     * @param id 编号
     * @return 店员申请
     */
    ClerkApplyDO getClerkApply(Long id);

    ClerkApplyDO getClerkApply(Long userId, Long id);

    /**
     * 获得店员申请分页
     *
     * @param pageReqVO 分页查询
     * @return 店员申请分页
     */
    PageResult<ClerkApplyDO> getClerkApplyPage(ClerkApplyPageReqVO pageReqVO);

    /**
     * 创建店员申请
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClerkApply(@Valid AppClerkApplySaveReqVO createReqVO);

    /**
     * 更新店员申请
     *
     * @param updateReqVO 更新信息
     */
    void updateClerkApply(@Valid AppClerkApplySaveReqVO updateReqVO);

    /**
     * 获得店员申请分页
     *
     * @param pageReqVO 分页查询
     * @return 店员申请分页
     */
    PageResult<ClerkApplyDO> getClerkApplyPage(AppClerkApplyPageReqVO pageReqVO);

    void updateClerkApplyStatus(Long id, Integer status);

    List<CategoryRespVO> getGoodsList(Long id);

    void updateGoodsList(AppClerkApplySaveReqVO updateReqVO);

    void updateGoodsList(ClerkApplySaveReqVO updateReqVO);

    void updateOnlineStatus(AppClerkApplySaveReqVO updateReqVO);

    /**
     * 获取店员等级
     * @param id 店员编号
     * @return
     */
    ClerkLevelDO getClerkLevel(Long id);

    List<CategoryRespVO> getAppGoodsList(Long id);
}